home *** CD-ROM | disk | FTP | other *** search
/ SuperHack / SuperHack CD.bin / CODING / SOUND / CRYS270.ZIP / CRYSMEM.ASM < prev    next >
Encoding:
Assembly Source File  |  1995-06-26  |  2.2 KB  |  134 lines

  1. ;****************************************************************************
  2. ;*    Module contenant des fonctions DOS de base pour lire un mémoire
  3. ;*    ATTENTION toutes ces fonctions sont de type NEAR
  4. ;*
  5. ;* Programmé par Sébastien Granjoux
  6. ;* Commencé le 19/02/95
  7. ;* Modification le 19/02/95
  8.  
  9. IDEAL
  10.  
  11. INCLUDE "CRYSLOAD.INC"
  12.  
  13. PUBLIC    USEMEM
  14.  
  15. SEGMENT CSEG PARA PUBLIC USE16 'CODE'
  16.  
  17. ASSUME    cs:CSEG
  18.  
  19. UseMem:
  20.     FILESYS <OFFSET openmem,OFFSET closemem,OFFSET seekmem,OFFSET readmem>
  21.  
  22. MemPos    DD    0
  23.  
  24. ;***************************************************************************
  25. ;*    Ouvre un fichier en mode lecture, ATTENTION il ne peut y avoir
  26. ;*    qu'un seul fichier ouvert en même temps
  27. ;*
  28. ;* Entrée:
  29. ;*    DS:DX    position dans la mémoire
  30. ;*
  31. ;* Sortie:
  32. ;*    AX    erreur si C=1
  33.  
  34. PROC    openmem
  35.  
  36.     call    normptr
  37.     ret
  38. ENDP
  39.  
  40. ;***************************************************************************
  41. ;*    Lit un block d'octet dans un overlay précédament ouvert
  42. ;*
  43. ;* Entrée:
  44. ;*    CX    nombre d'octet à lire
  45. ;*    DS:DX    adresse du buffer recevant les données
  46. ;*
  47. ;* Sortie:
  48. ;*    AX    erreur si C=1
  49.  
  50. PROC    readmem
  51.  
  52.     push    ds
  53.     push    es
  54.     push    si
  55.     push    di
  56.     push    cx
  57.     mov    ax,ds
  58.     mov    es,ax
  59.     mov    di,dx
  60.     lds    si,[cs:MemPos]
  61.     rep    movsb
  62.     mov    dx,si
  63.     call    normptr
  64.     pop    cx
  65.     pop    di
  66.     pop    si
  67.     pop    es
  68.     pop    ds
  69.  
  70.     ret
  71.  
  72. ENDP
  73.  
  74. ;***************************************************************************
  75. ;*    Se déplace dans l'overlay par rapport à la position courante
  76. ;*
  77. ;* Entrée:
  78. ;*      CX:DX    nouvelle position dans l'overlay
  79. ;*
  80. ;* Sortie:
  81. ;*    AX    erreur si C=1
  82.  
  83. PROC    seekmem
  84.  
  85.     push    ds
  86.     mov    ch,cl
  87.     xor    cl,cl
  88.     add    dx,[cs:OFFSET MemPos]
  89.     adc    ch,0
  90.     shl    cx,4
  91.     add    cx,[cs:OFFSET MemPos+2]
  92.     mov    ds,cx
  93.  
  94.     call    normptr
  95.     pop    ds
  96.  
  97.     ret
  98.  
  99. ENDP
  100.  
  101. ;***************************************************************************
  102. ;*    Ferme la mémoire ouverte précédament
  103. ;*
  104. ;* Sortie:
  105. ;*    AX    erreur si C=1
  106.  
  107. PROC    closemem
  108.  
  109.     ret
  110.  
  111. ENDP
  112.  
  113. ;**************************************************************************
  114. ;*    Normalise un pointeur long et le sauvegarde
  115. ;*
  116. ;* Entrée:
  117. ;*    DS:DX    pointeur à normaliser
  118.  
  119. PROC    normptr
  120.  
  121.     mov    bx,ds
  122.     mov    ax,dx
  123.     shr    ax,4
  124.     add    bx,ax
  125.     and    dx,000Fh
  126.     mov    [cs:OFFSET MemPos],dx
  127.     mov    [cs:OFFSET MemPos+2],bx
  128.  
  129.     ret
  130. ENDP
  131.  
  132. ENDS
  133.  
  134. END